
#include "list.h"

// 初始化链表节点（用于管理员或用户信息）
USE *List_init()
{
	USE *p = malloc(sizeof(USE));
	memset(p, 0, sizeof(USE));
	p->Next = NULL;
	printf("\n");
	return p;
}

// 打印输出链表中的管理员或用户信息
void Printf_list(USE *head)
{
	// 断言确保链表头指针不为 NULL
	assert(head != NULL);
	// 从链表的第一个有效节点开始遍历
	USE *p = head->Next;
	while (p != NULL)
	{
		printf("id：%d 姓名: %s 密码: %s\n", p->user_id, p->user_name, p->user_password);
		p = p->Next;
	}
}

// 释放链表内存（用于管理员或用户信息）
void freeLink(USE *head)
{
	// 断言确保链表头指针不为 NULL
	assert(head != NULL);
	// temp 用于临时存储当前节点，cur 用于存储下一个节点
	USE *temp = NULL;
	temp = head;
	USE *cur = NULL;
	while (temp != NULL)
	{
		// 将当前节点的下一个节点存储在 cur
		cur = temp->Next;
		// 释放当前节点内存
		free(temp);
		// 将当前节点置为 NULL，防止悬空指针
		temp = NULL;
		// 将 cur 赋值给 temp，继续下一轮循环释放下一个节点
		temp = cur;
	}
}

// 初始化链表节点（用于水泵信息）
WP *List_init_WP()
{
	WP *p = malloc(sizeof(WP));
	memset(p, 0, sizeof(WP));
	p->Next = NULL;
	printf("\n");
	return p;
}

// 打印输出链表中的水泵信息
void Printf_list_WP(WP *head)
{
	// 断言确保链表头指针不为 NULL
	assert(head != NULL);
	// 从链表的第一个有效节点开始遍历
	WP *p = head->Next;
	while (p != NULL)
	{
		printf("id:%d\t名字:%s\n", p->id, p->pump_name);
		p = p->Next;
	}
}

// 释放链表内存（用于水泵信息）
void freeLink_WP(WP *head)
{
	// 断言确保链表头指针不为 NULL
	assert(head != NULL);
	// temp 用于临时存储当前节点，cur 用于存储下一个节点
	WP *temp = NULL;
	temp = head;
	WP *cur = NULL;
	while (temp != NULL)
	{
		// 将当前节点的下一个节点存储在 cur
		cur = temp->Next;
		// 释放当前节点内存
		free(temp);
		// 将当前节点置为 NULL，防止悬空指针
		temp = NULL;
		// 将 cur 赋值给 temp，继续下一轮循环释放下一个节点
		temp = cur;
	}
}

// 初始化链表节点（用于具体数据信息）
DAT *List_init_DAT()
{
	DAT *p = malloc(sizeof(DAT));
	memset(p, 0, sizeof(DAT));
	p->Next = NULL;
	printf("\n");
	return p;
}

// 打印输出链表中的具体数据信息
void Printf_list_DAT(DAT *head)
{
	// 断言确保链表头指针不为 NULL
	assert(head != NULL);
	// 从链表的第一个有效节点开始遍历
	DAT *p = head->Next;
	while (p != NULL)
	{
		printf("%f,%f,%f,%d,%f,%f,%s,%d\n", p->temperature, p->liquid_level, p->flow_rate, p->valve_state, p->negative_pressure, p->pressure, p->time, p->pump_id);
		p = p->Next;
	}
}

// 释放链表内存（用于具体数据信息）
void freeLink_DAT(DAT *head)
{
	// 断言确保链表头指针不为 NULL
	assert(head != NULL);
	// temp 用于临时存储当前节点，cur 用于存储下一个节点
	DAT *temp = NULL;
	temp = head;
	DAT *cur = NULL;
	while (temp != NULL)
	{
		// 将当前节点的下一个节点存储在 cur
		cur = temp->Next;
		// 释放当前节点内存
		free(temp);
		// 将当前节点置为 NULL，防止悬空指针
		temp = NULL;
		// 将 cur 赋值给 temp，继续下一轮循环释放下一个节点
		temp = cur;
	}
}